package com.example.it.studyviewflipper;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ViewFlipper;

import java.util.ArrayList;
import java.util.List;

public class AlbumActivity extends AppCompatActivity {


    /************
     * 一些全局变量
     ***********/
    private ViewFlipper flipper;    //ViewFlipper 对象
    private List<Integer> id_list;  //图片Id的集合，为了偷懒在上一个Activity总存储成为了静态
    private LinearLayout llDots;   //小点点的父容器
    private List<ImageView> dotList; //所有小点点的集合

    /***********
     * 手势相关的变量
     ***********/
    private GestureDetector detector; //手势监听器
    private int currentId; //当前图片的索引


    /**
     * 拿到我们关心的View
     */
    private void initFindView() {
        flipper = (ViewFlipper) this.findViewById(R.id.flImages);
        llDots = (LinearLayout) this.findViewById(R.id.llDots);
    }

    /**
     * 初始化标识图片位置的小圆点
     */
    private void initDots() {
        dotList = new ArrayList<ImageView>();

        //根据图片的数量来设置小圆点的数量
        for (int i = 0; i < id_list.size(); i++) {
            ImageView iv = new ImageView(this);
            //设置包裹内容
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(-2, -2);
            //设置Margin
            lp.setMargins(3, 3, 3, 3);

            iv.setLayoutParams(lp);
            iv.setImageResource(R.drawable.dot_unselected);
            //添加到dot的父容器中
            llDots.addView(iv);
            dotList.add(iv);
        }
    }

    /**
     * 初始化轮播的视图
     */
    private void initImageView() {
        //根据图片的数量来设置小圆点的数量
        for (int i = 0; i < id_list.size(); i++) {
            ImageView iv = new ImageView(this);
            //设置包裹内容
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(-1, -1);
            //设置Margin
            iv.setLayoutParams(lp);

            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            iv.setImageResource(id_list.get(i));
            //添加到dot的父容器中
            flipper.addView(iv);
        }
    }

    /**
     * 初始化手势
     */
    private void initGesture() {
        detector = new GestureDetector(this, new MySimpleOnGestureListener());

    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_album);

        id_list = HomeActivity.ID_List;

        initFindView();
        initDots();
        initImageView();
        initGesture();

        //获取到上一个Activity传递过来的参数
        Intent intent = this.getIntent();
        currentId = intent.getIntExtra("currentId", -1);
        //设置当前选中的点
        if (currentId != -1) {
            flipper.setDisplayedChild(currentId);
            dotList.get(currentId).setImageResource(R.drawable.dot_selected);
        }
    }


    /**
     * 捕获触摸事件，交给手势监听器去处理
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        this.detector.onTouchEvent(event);
        return true;
    }


    class MySimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            //滑动距离的绝对值
            int distance = (int) Math.abs(e1.getX() - e2.getX());
            //证明是向左滑动,查看下一个图片
            if (e1.getX() > e2.getX()) {
                if (distance > 300) {
                    //设置一下相关的动画
                    flipper.setInAnimation(AlbumActivity.this, R.anim.right_in);
                    flipper.setOutAnimation(AlbumActivity.this, R.anim.left_out);
                    
                    //显示下一个View
                    flipper.showNext();

                    //将上一个选中的dot取消
                    dotList.get(currentId).setImageResource(R.drawable.dot_unselected);
                    //计算下一张图片应该选中的小圆点
                    currentId = (currentId + 1) == id_list.size() ? 0 : currentId + 1;
                    //选中当前的dot
                    dotList.get(currentId).setImageResource(R.drawable.dot_selected);
                }
            } else {
                //证明是向右滑动,查看下一个图片
                if (distance > 300) {

                    //设置一下相关的动画
                    flipper.setInAnimation(AlbumActivity.this, R.anim.left_in);
                    flipper.setOutAnimation(AlbumActivity.this, R.anim.right_out);

                    //显示上一个视图
                    flipper.showPrevious();

                    //将上一个选中的dot取消
                    dotList.get(currentId).setImageResource(R.drawable.dot_unselected);
                    //计算下一张图片应该选中的小圆点
                    currentId = (currentId - 1) == -1 ? id_list.size() - 1 : currentId - 1;
                    //选中当前的dot
                    dotList.get(currentId).setImageResource(R.drawable.dot_selected);
                }
            }
            return true;
        }
    }
}
